home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 38 / Amiga Format CD38 (1999-03-15)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-04].iso / -seriously_amiga- / programming / other / cyberxxxsrc / misc / asynciosupport.mod < prev    next >
Text File  |  1999-02-08  |  5KB  |  188 lines

  1. MODULE  AsyncIOSupport;
  2.  
  3. (* $StackChk- $OvflChk- $RangeChk- $CaseChk- $ReturnChk- $NilChk- $TypeChk- $OddChk- $ClearVars- *)
  4.  
  5. (* /// ------------------------------- "IMPORT" -------------------------------- *)
  6. IMPORT  aio:=AsyncIO,
  7.         d:=Dos,
  8.         e:=Exec,
  9.         i2m:=Intel2Mot,
  10.         u:=Utility,
  11.         y:=SYSTEM;
  12. (* \\\ ------------------------------------------------------------------------- *)
  13.  
  14. VAR     fh: aio.AsyncFilePtr;
  15.         readOk - : BOOLEAN;
  16.         noOdd * : BOOLEAN;
  17.  
  18. (* /// -------------------------- "PROCEDURE Open()" --------------------------- *)
  19. PROCEDURE Open * (name: ARRAY OF CHAR;
  20.                   buffers: LONGINT): BOOLEAN; (* $CopyArrays- *)
  21. BEGIN
  22.   IF fh#NIL THEN y.SETREG(0,aio.CloseAsync(fh)); END;
  23.   fh:=aio.OpenAsync(name,aio.read,buffers);
  24.   readOk:=(fh#NIL);
  25.   RETURN readOk;
  26. END Open;
  27. (* \\\ ------------------------------------------------------------------------- *)
  28.  
  29. (* /// -------------------------- "PROCEDURE Close()" -------------------------- *)
  30. PROCEDURE Close * ();
  31. BEGIN
  32.   IF fh#NIL THEN
  33.     y.SETREG(0,aio.CloseAsync(fh));
  34.     fh:=NIL;
  35.   END;
  36. END Close;
  37. (* \\\ ------------------------------------------------------------------------- *)
  38.  
  39. (* /// -------------------------- "PROCEDURE Read()" --------------------------- *)
  40. PROCEDURE Read * (buffer: e.APTR;
  41.                   size: LONGINT);
  42. BEGIN
  43.   IF noOdd & ODD(size) THEN INC(size); END;
  44.   readOk:=(aio.ReadAsyncAPTR(fh,buffer,size)=size) & readOk;
  45. END Read;
  46. (* \\\ ------------------------------------------------------------------------- *)
  47.  
  48. (* /// -------------------------- "PROCEDURE Skip()" --------------------------- *)
  49. PROCEDURE Skip * (bytes: LONGINT);
  50. BEGIN
  51.   IF noOdd & ODD(bytes) THEN INC(bytes); END;
  52.   readOk:=(aio.SeekAsync(fh,bytes,aio.current)#-1) & readOk;
  53. END Skip;
  54. (* \\\ ------------------------------------------------------------------------- *)
  55.  
  56. (* /// ------------------------- "PROCEDURE SeekTo()" -------------------------- *)
  57. PROCEDURE SeekTo * (pos: LONGINT);
  58. BEGIN
  59.   readOk:=(aio.SeekAsync(fh,pos,aio.start)#-1) & readOk;
  60. END SeekTo;
  61. (* \\\ ------------------------------------------------------------------------- *)
  62.  
  63. (* /// ------------------------- "PROCEDURE FilePos()" ------------------------- *)
  64. PROCEDURE FilePos * (): LONGINT;
  65.  
  66. VAR     pos: LONGINT;
  67.  
  68. BEGIN
  69.   pos:=aio.SeekAsync(fh,0,aio.current);
  70.   readOk:=(pos#-1) & readOk;
  71.   RETURN pos;
  72. END FilePos;
  73. (* \\\ ------------------------------------------------------------------------- *)
  74.  
  75. (* /// ------------------------ "PROCEDURE FileSize()" ------------------------- *)
  76. PROCEDURE FileSize * (): LONGINT;
  77.  
  78. VAR     fib: d.FileInfoBlockPtr;
  79.         size: LONGINT;
  80.  
  81. BEGIN
  82.   fib:=d.AllocDosObjectTags(d.fib,u.done);
  83.   IF fib#NIL THEN
  84.     readOk:=d.ExamineFH(fh.file,fib^) & readOk;
  85.     size:=fib.size;
  86.     d.FreeDosObject(d.fib,fib);
  87.   ELSE
  88.     size:=0;
  89.   END;
  90.   RETURN size;
  91. END FileSize;
  92. (* \\\ ------------------------------------------------------------------------- *)
  93.  
  94. (* /// ----------------------- "PROCEDURE GetMSBLong()" ------------------------ *)
  95. PROCEDURE GetMSBLong * (): LONGINT;
  96.  
  97. VAR     data: LONGINT;
  98.         ret: LONGINT;
  99.  
  100. BEGIN
  101.   ret:=0;
  102.   IF aio.ReadAsync(fh,data,SIZE(data))=SIZE(data) THEN
  103.     ret:=data;
  104.     readOk:=TRUE;
  105.   ELSE
  106.     readOk:=FALSE;
  107.   END;
  108.   RETURN ret;
  109. END GetMSBLong;
  110. (* \\\ ------------------------------------------------------------------------- *)
  111.  
  112. (* /// ----------------------- "PROCEDURE GetMSBShort()" ----------------------- *)
  113. PROCEDURE GetMSBShort * (): INTEGER;
  114.  
  115. VAR     data: INTEGER;
  116.         ret: INTEGER;
  117.  
  118. BEGIN
  119.   ret:=0;
  120.   IF aio.ReadAsync(fh,data,SIZE(data))=SIZE(data) THEN
  121.     ret:=data;
  122.     readOk:=TRUE;
  123.   ELSE
  124.     readOk:=FALSE;
  125.   END;
  126.   RETURN ret;
  127. END GetMSBShort;
  128. (* \\\ ------------------------------------------------------------------------- *)
  129.  
  130. (* /// ----------------------- "PROCEDURE GetLSBLong()" ------------------------ *)
  131. PROCEDURE GetLSBLong * (): LONGINT;
  132.  
  133. VAR     data: LONGINT;
  134.  
  135. BEGIN
  136.   IF aio.ReadAsync(fh,data,SIZE(data))=SIZE(data) THEN
  137.     readOk:=TRUE;
  138.     RETURN i2m.LSB2MSBLong(data);
  139.   ELSE
  140.     readOk:=FALSE;
  141.     RETURN 0;
  142.   END;
  143. END GetLSBLong;
  144. (* \\\ ------------------------------------------------------------------------- *)
  145.  
  146. (* /// ------------------------ "PROCEDURE GetLSBSet()" ------------------------ *)
  147. PROCEDURE GetLSBLSet * (): LONGSET;
  148.  
  149. VAR     data: LONGSET;
  150.  
  151. BEGIN
  152.   IF aio.ReadAsync(fh,data,SIZE(data))=SIZE(data) THEN
  153.     readOk:=TRUE;
  154.     RETURN i2m.LSB2MSBLSet(data);
  155.   ELSE
  156.     readOk:=FALSE;
  157.     RETURN LONGSET{};
  158.   END;
  159. END GetLSBLSet;
  160. (* \\\ ------------------------------------------------------------------------- *)
  161.  
  162. (* /// ----------------------- "PROCEDURE GetLSBShort()" ----------------------- *)
  163. PROCEDURE GetLSBShort * (): INTEGER;
  164.  
  165. VAR     data: INTEGER;
  166.  
  167. BEGIN
  168.   IF aio.ReadAsync(fh,data,SIZE(data))=SIZE(data) THEN
  169.     readOk:=TRUE;
  170.     RETURN i2m.LSB2MSBShort(data);
  171.   ELSE
  172.     readOk:=FALSE;
  173.     RETURN 0;
  174.   END;
  175. END GetLSBShort;
  176. (* \\\ ------------------------------------------------------------------------- *)
  177.  
  178. (* /// ------------------------ "PROCEDURE UndoError()" ------------------------ *)
  179. PROCEDURE UndoError * ();
  180. BEGIN
  181.   readOk:=TRUE;
  182. END UndoError;
  183. (* \\\ ------------------------------------------------------------------------- *)
  184.  
  185. CLOSE
  186.   Close();
  187. END AsyncIOSupport.
  188.